package org.visionlibrary.image.geomtric.util;

/**
 * Klasa narzedziowa realizujaca stoper, pozwala na mierzenie czasu wykonywania.
 * <br /><br />
 * Przyklad uzycia:
 * <code>
 * StopWatch stoper = new StopWatch();
 * stoper.start();
 * jakas czasochlonna metoda
 * stoper.stop();
 * 
 * </code>
 */
public class StopWatch {
    
    private long startTime = 0;
    private long stopTime = 0;
    private boolean running = false;

    /**
     * Metoda uruchamia stoper. Zapisuje czas w momencie uruchomienia.
     */
    public void start() {
        this.startTime = System.currentTimeMillis();
        this.running = true;
    }

    /**
     * Metoda zatrzymuje stoper. Zapisuje czas w momencie uruchomienia.
     */
    public void stop() {
        this.stopTime = System.currentTimeMillis();
        this.running = false;
    }

    /**
     * Metoda pozwala na uzyskanie czasu w milisekundach.
     * 
     * @return Czas pomiedzy uruchomieniem metody start() i stop().
     */
    public long getElapsedTime() {
        long elapsed;
        if (running) {
             elapsed = (System.currentTimeMillis() - startTime);
        }
        else {
            elapsed = (stopTime - startTime);
        }
        return elapsed;
    }
    
    /**
     * Metoda pozwala na uzyskanie czasu w sekundach.
     * 
     * @return Czas pomiedzy uruchomieniem metody start() i stop().
     */
    public long getElapsedTimeSecs() {
        long elapsed;
        if (running) {
            elapsed = ((System.currentTimeMillis() - startTime) / 1000);
        }
        else {
            elapsed = ((stopTime - startTime) / 1000);
        }
        return elapsed;
    }
}